


import bpy
from bpy.types import Operator
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类

import engine.initLIB.load_dll as engineLib
import ctypes
import 节点.Core.bl_UI配色 as UI配色









E_元素添加方式枚举 = [
	("TYPE_追加", "添加尾", "", 0),
	("TYPE_插入", "插入", "", 1),
	("TYPE_插入头", "添加头", "", 2),
]




class C_Node_添加元素(基类.C_Node_基类):
	bl_dname = 'bl_node_添加元素'
	bl_label = '添加元素'
	
	m_坐标系转换 = bpy.props.EnumProperty(items=E_元素添加方式枚举, default='TYPE_追加', name="添加方式")
	def init(self, context):
		super(C_Node_添加元素, self).f_init(context)
		self.inputs.new('C_Socket_Vector模板', name='源')
		self.inputs.new('C_Socket_iVec4', name='位置')
		self.outputs.new('C_Socket_引用', name='目标')
		self.f_toCPP(self.id_data)

	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_坐标系转换', expand=True)

	def f_toCPP(self, tree):
		engineLib.flexCAPI.f_创建添加元素节点(ctypes.c_wchar_p(tree.name), ctypes.c_wchar_p(self.name), self.f_getPyObject(tree));
		
		

class C_NODE_AddMenu_添加元素(bpy.types.Operator):
	bl_idname = 'node.add_element'
	bl_label = '添加元素'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_添加元素', use_transform=True)
		return {'FINISHED'}



















class C_Node_从条件删除i32_Array1D元素(基类.C_Node_基类):
	bl_dname = 'bl_node_从条件删除vec3List元素'
	bl_label = '从条件删除I32_1D元素'
	#m_坐标系转换 = bpy.props.EnumProperty(items=E_元素添加方式枚举, default='TYPE_追加', name="添加方式")
	def init(self, context):
		super(C_Node_从条件删除i32_Array1D元素, self).f_init(context)
		self.inputs.new('C_Socket_I32_Array1D', name='源')
		self.inputs.new('C_Socket_I8_Array1D', name='条件')
		self.outputs.new('C_Socket_I32_Array1D', name='var')
		self.f_toCPP(self.id_data)

		self.use_custom_color = True
		self.color = UI配色.g_内部节点颜色

	def f_toCPP(self, tree):
		engineLib.flexCAPI.f_创建从条件中删除I32_Array1D元素节点(ctypes.c_wchar_p(tree.name), ctypes.c_wchar_p(self.name), self.f_getPyObject(tree));
		
		

class C_NODE_AddMenu_从条件删除i32_Array1D元素(bpy.types.Operator):
	bl_idname = 'node.add_node_from_bool_remove_i32_a1_element'
	bl_label = '从条件删除I32_1D元素'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_从条件删除i32_Array1D元素', use_transform=True)
		return {'FINISHED'}















class C_Node_从条件删除i32_Array2D元素(基类.C_Node_基类):
	bl_dname = 'bl_node_从条件删除vec3List元素'
	bl_label = '从条件删除I32_2D元素'
	#m_坐标系转换 = bpy.props.EnumProperty(items=E_元素添加方式枚举, default='TYPE_追加', name="添加方式")
	def init(self, context):
		super(C_Node_从条件删除i32_Array2D元素, self).f_init(context)
		self.inputs.new('C_Socket_I32_Array2D', name='源')
		self.inputs.new('C_Socket_I8_Array1D', name='条件')
		self.outputs.new('C_Socket_I32_Array2D', name='var')
		self.f_toCPP(self.id_data)

		self.use_custom_color = True
		self.color = UI配色.g_内部节点颜色

	def f_toCPP(self, tree):
		engineLib.flexCAPI.f_创建从条件中删除I32_Array2D元素节点(ctypes.c_wchar_p(tree.name), ctypes.c_wchar_p(self.name), self.f_getPyObject(tree));
		
		

class C_NODE_AddMenu_从条件删除i32_Array2D元素(bpy.types.Operator):
	bl_idname = 'node.add_node_from_bool_remove_i32_a2_element'
	bl_label = '从条件删除I32_2D元素'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_从条件删除i32_Array2D元素', use_transform=True)
		return {'FINISHED'}















class C_Node_从条件删除vec3_Array1D元素(基类.C_Node_基类):
	bl_dname = 'bl_node_从条件删除vec3List元素'
	bl_label = '从条件删除vec3List元素'
	#m_坐标系转换 = bpy.props.EnumProperty(items=E_元素添加方式枚举, default='TYPE_追加', name="添加方式")
	def init(self, context):
		super(C_Node_从条件删除vec3_Array1D元素, self).f_init(context)
		self.inputs.new('C_Socket_Vec3_Array1D', name='源')
		self.inputs.new('C_Socket_I8_Array1D', name='条件')
		self.outputs.new('C_Socket_Vec3_Array1D', name='var')
		self.f_toCPP(self.id_data)

		self.use_custom_color = True
		self.color = UI配色.g_内部节点颜色

	def f_toCPP(self, tree):
		engineLib.flexCAPI.f_创建从条件中删除vec3_Array1D元素节点(ctypes.c_wchar_p(tree.name), ctypes.c_wchar_p(self.name), self.f_getPyObject(tree));
		
		

class C_NODE_AddMenu_从条件删除vec3_Array1D元素(bpy.types.Operator):
	bl_idname = 'node.add_node_from_bool_remove_element'
	bl_label = '从条件删除vec3_Array1D元素'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_从条件删除vec3_Array1D元素', use_transform=True)
		return {'FINISHED'}















class C_Node_从索引取vec3_Array1D元素(基类.C_Node_基类):
	bl_dname = 'bl_node_从索引取vec3_Array1D元素'
	bl_label = '从索引取vec3_Array1D元素'
	#m_坐标系转换 = bpy.props.EnumProperty(items=E_元素添加方式枚举, default='TYPE_追加', name="添加方式")
	def init(self, context):
		super(C_Node_从索引取vec3_Array1D元素, self).f_init(context)
		self.inputs.new('C_Socket_Vec3_Array1D', name='源')
		self.inputs.new('C_Socket_I8_Array1D', name='条件')
		self.outputs.new('C_Socket_Vec3_Array1D', name='var')
		self.f_toCPP(self.id_data)

		self.use_custom_color = True
		self.color = UI配色.g_内部节点颜色

	def f_toCPP(self, tree):
		engineLib.flexCAPI.f_创建从索引取vec3_Array1D元素节点(ctypes.c_wchar_p(tree.name), ctypes.c_wchar_p(self.name), self.f_getPyObject(tree));
		
		

class C_NODE_AddMenu_从索引取vec3_Array1D元素(bpy.types.Operator):
	bl_idname = 'node.add_node_from_index_get_element'
	bl_label = '从索引取vec3_Array1D元素'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_从索引取vec3_Array1D元素', use_transform=True)
		return {'FINISHED'}










classes = (
	#C_Node_索引取列表中物体数据,
	#C_NODE_AddMenu_索引取列表中物体数据,

	C_Node_添加元素,
	C_NODE_AddMenu_添加元素,

	C_Node_从条件删除vec3_Array1D元素,
	C_NODE_AddMenu_从条件删除vec3_Array1D元素,

	C_Node_从条件删除i32_Array1D元素,
	C_NODE_AddMenu_从条件删除i32_Array1D元素,

	C_Node_从条件删除i32_Array2D元素,
	C_NODE_AddMenu_从条件删除i32_Array2D元素,


	
	C_Node_从索引取vec3_Array1D元素,
	C_NODE_AddMenu_从索引取vec3_Array1D元素,

	
)




def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)





